﻿/*+===================================================================
File:      Gun.h

Summary:   Định nghĩa lớp CGun
===================================================================+*/

#ifndef _GUN_H_
#define _GUN_H_

#include "Bullet.h"

/*C+==================================================================
Class:    CGun

Summary:  Lớp CGun là lớp có thuộc tính, phương thức cơ bản để thực
          hiện việc bắn đạn.
==================================================================-C*/
class CGun
{
private:
	int m_nCurBulletType;					// Loại Đạn hiện tại.
	int m_nMaxBullets;						// Số lượng đạn tối đa trong súng.
	int m_nBulletPerShot;					// Số lượng đạn được bắn ra trong 1 lần bắn.
	int m_nRemainBullets;					// Số lượng đạn còn lại trong súng.
	float m_fBulletAngle;					// Hướng bắn của đạn.
	int m_nCharaterDirectionX;				// Hướng quay chiều X của nhân vật bắn. Đang quay mặt bên trái hay phải.
public:
	CGun(int curBulletType);
	CGun(int curBulletType, int maxBullets, int bulletPerShot);
	~CGun();


	/*M+==================================================================
	Method:	    CGun::SetCurBulletType

	Summary:	Phương thức thiết lập lại loại đạn của súng.

	Params:		bulletType - Loại đạn thiết lập.
	==================================================================-M*/
	void SetCurBulletType(int bulletType);

	/*M+==================================================================
	Method:	    CGun::SetBulletAngle

	Summary:	Phương thức thiết lập hướng bắn của đạn.

	Params:		angle - Góc bắn.
	==================================================================-M*/
	void SetBulletAngle(float angle);

	/*M+==================================================================
	Method:	    CGun::SetCharaterDirectionX

	Summary:	Phương thức thiết lập hướng của nhân vật cho súng.

	Params:		SetCharaterDirectionX - hướng.
	==================================================================-M*/
	void SetCharaterDirectionX(int charaterDirectionX);

	/*M+==================================================================
	Method:	    CGun::GetCurBulletType

	Summary:	Phương thức lấy ra loại đạn hiện tại của súng.
	==================================================================-M*/
	int GetCurBulletType();

	/*M+==================================================================
	Method:	    CGun::Fire

	Summary:	Phương thức bắn của súng.

	Params:		
				pos - Vị trí ban đầu của viên đạn.
	==================================================================-M*/
	bool Fire(D3DXVECTOR2 pos);

	void UpGun(int bulletItemType);

	/*M+==================================================================
	Method:	    CGun::ReloadBullet

	Summary:	Phương thức nạp lại đạn cho súng, tăng m_nRemainBullets.
	==================================================================-M*/
	void ReloadBullet();

	/*M+==================================================================
	Method:	    CGun::IsFullBullets

	Summary:	Phương thức kiểm tra súng có đủ đạn ko.
	==================================================================-M*/
	bool IsFullBullets();

	/*M+==================================================================
	Method:	    CGun::GetRemainBullets

	Summary:	Phương thức số đạn còn lại trong súng.
	==================================================================-M*/
	int GetRemainBullets();

	/*M+==================================================================
	Method:	    CGun::IsOutOfBullet

	Summary:	Phương thức kiểm tra súng đã hết đạn
	==================================================================-M*/
	bool IsOutOfBullet();
};

#endif